HTML 접근 및 수정

✒️ 2025-05-16 11:22 내용 수정



객체의 속성 다루기

<!-- data- 뒤에 지정할 이름을 적고, 이름끼리 구분은 - 를 사용 -->
<p class="test" data-custom-extra="value">dataset을 추가한 html</p>
// javascript에서 접근할 때는 카멜 표현식으로 접근
let test = document.querySelector(".test");
let data = test.dataset.customExtra;
메소드 설명
hasAttribute(속성) 지정한 속성을 가지고 있는지 검사
getAttribute(속성) 지정한 속성을 가져옴
setAttribute(속성, 속성값) 속성과 속성값 설정
removeAttribute(속성) 지정한 속성 제거
selector.hasAttribute('attrName');
selector.getAttribute('attrName');
selector.setAttribute('attrName', value);
selector.removeAttribute('attrName');
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		
		<p class="pclass">클래스가 있는 p태그</p>
		
		<script>
			let p = document.querySelector('.pclass');
			
			console.log(p.hasAttribute('style')); // false
			
			console.log(p.getAttribute('class')); // pclass
			
			p.setAttribute('style', 'color:red');
			// p.style = 'color:blue'; // 속성 이름으로 바로 변경할 수 있다.
			p.removeAttribute('class');
			console.log(p);
			console.log(p.hasAttribute('class')); // class를 지웠기에 false
		</script>
	</body>
</html>

DOM 3.png


HTML 요소의 Content에 접근하기

mdn web docs innerHTML, mdn web docs innerText, mdn web docs textContent

속성 설명 HTML 태그 처리 숨김 요소
포함 여부
스타일 반영 보안 위험성
textContent 요소의 모든 텍스트 콘텐츠를 반환
HTML 태그를 무시
무시 ✔️ 낮음
innerText 요소의 렌더링된 텍스트를 반환
CSS 스타일을 고려함
무시 ✔️ 낮음
innerHTML 요소의 HTML 콘텐츠를 반환
HTML 태그를 포함
포함 ✔️ ✔️ 높음
  1. textContent : <script>, <style>을 포함한 요소의 모든 텍스트 컨텐츠를 반환한다.
    • 영역 내에 있는 HTML 태그(<strong>, <span> 등)를 무시한다.
    • 숨김 처리한 요소를 포함하여 반환한다.
    • 스타일을 반영하지 않는다.
    • 보안 위험성이 낮다.
document.querySelector(".test").textContent;
  1. innerText : 요소의 렌더링된 텍스트(화면에서 사람이 보는 텍스트)를 반환한다.
    • 영역 내에 있는 HTML 태그(<strong>, <span> 등)를 무시한다.
    • 숨김 처리한 요소를 제외하여 반환한다.
    • 스타일을 반영하여 반환한다.
    • 보안 위험성이 낮다.
document.querySelector(".test").innerText;
  1. innerHTML : 요소의 HTML 컨텐츠를 반환한다.
    • 영역 내에 있는 HTML 태그(<strong>, <span> 등)를 포함한다.
    • 숨김 처리한 요소를 포함하여 반환한다.
    • 스타일을 반영하여 반환한다.
    • 보안 위험성이 높다.
document.querySelector(".test").innerHTML;
<p id="example">
	보이는 텍스트
	<span class="hidden">숨겨진 텍스트</span>
	<strong>굵은 텍스트</strong>
</p>

<script>
	const p = document.getElementById('example');

	console.log('textContent:', p.textContent);
	console.log('innerText:', p.innerText);
	console.log('innerHTML:', p.innerHTML);
</script>

js_html_text.png


HTML 요소의 클래스 접근 및 수정하기

let list = selector.classList;

selector.classList.add('newClass');
selector.classList.toggle('toggleClass');
메소드 설명
add('className') 해당 element에 class 추가
remove('className') 해당 element의 class 제거
toggle('className' [, force]) 해당 element에 토글형 class 적용.
class가 존재하면 제거하고 false 반환, class가 없다면 추가하고 true 반환
두 번째 파라미터가 true라면 class 추가, false라면 class 제거
contains('className') 해당 element에 특정 class가 있는지 확인
replace('oldName', 'newName') 해당 element에 존재하는 class를 새로운 class로 교체
target.classList.add('pclass');
console.log(target.getAttribute('class'));

DOM 5.png


HTML 요소 추가 및 삭제

참고 자료 : W3School DOM Nodes

  1. 요소 생성하기
const el = document.createElement("div");
el.textContent = "새 박스";
el.classList.add("box"); // 요소에 클래스 추가
  1. 요소 추가하기
메서드 설명
appendChild() 부모 노드의 자식 노드들 중 맨 마지막에 새 노드 추가
노드 객체만 추가 가능
append() 요소의 자식 노드들 중 마지막 위치에
새 노드나 문자열을 추가
prepend() 요소의 자식 노드들 중 맨 처음 위치에
새 노드나 문자열을 추가
insertBefore(new, ref) 부모 노드의 자식 노드들 중 특정 위치의
자식 노드 앞에 새 노드 추가
const parent = document.getElementById("container");
parent.appendChild(el); // 맨 마지막에 추가
  1. 요소 제거하기
메서드 설명
remove() 요소를 DOM에서 제거
removeChild() 자식 노드를 제거
parent.remove(el);
el.remove();
document.write("text");

기타 property

property 설명
clientWidth padding을 포함한 폭
clientWidth padding을 포함한 높이
offsetWidth border, padding, 스크롤바를 포함한 폭
offsetHeight border, padding, 스크롤바를 포함한 높이
scrollWidth overflow 때문에 볼 수 없는 폭까지 padding을 포함한 폭
scrollHeight overflow 때문에 볼 수 없는 높이까지 padding을 포함한 높이

예제 코드 - 구구단 만들기

selector.innerHTML = 'Content';
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
		<style>
			div{border: 2px solid black;
				width:300px;
				height:250px;
				background-color: darkslategray; 
				color:white;
				font-size: 20px;
				text-align: center;}
		</style>
		<script>
			function cal() {
				let num = Number(document.getElementById('num').value);
				let result = document.querySelector('#result');
				
				// 유효성 검사 - 문자열
				if (isNaN(num)) {
					alert("숫자만 입력해주세요");
					return; // 함수 빠져나오기
				}
				
				// 유효성 검사 - 2 ~ 9 외의 숫자
				if (num < 2 || num > 9) {
					alert("2에서 9 사이의 숫자만 입력해주세요");
					return; // 함수 빠져나오기
				}
				
				// result 초기화
				result.innerHTML = '';
				
				for(var i = 1; i <= 9; i++) {
					result.innerHTML += `${num} X ${i} = ${num*i} <br>`;
				}
			}
			
			var isVisible = true;
			function hide() {
				isVisible = !isVisible;
				
				// 숨기기 버튼과 보이기 버튼 이름 설정
				document.getElementById('hide').value = (isVisible ? "숨기기" : "보이기");
				
				// 결과창 표시
				document.querySelector('#result').style.display = (isVisible ? 'block' : 'none');
			}
		</script>
	</head>
	<body>
		숫자를 입력하세요 : 
		<input id="num">
		<input id="cal" type="button" value="계산하기" onclick="cal()">
		<input id="hide" type="button" value="숨기기" onclick="hide()">
		<hr>
		<div id="result">
		</div> 
	</body>
</html>

구구단 1.png
구구단 2.png
구구단 3.png
구구단 4.png
구구단 5.png